package com.qing.springcloud.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.BigIntegerCodec;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.qing.springcloud.config.handle.LongCodeHandle;
import com.qing.springcloud.config.handle.StringCodeHandle;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

/**
 * @author caozhipeng
 * @date 2025/7/18
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//		# com.chinaunicom.aurveyapp.app.result.HttpResult cannot be cast to java.lang.String
        converters.add(0, new MappingJackson2HttpMessageConverter());
    }

    /**
     * fastJson 消息转换
     *
     * @return
     * @author huang.zhong
     * @since 2019年6月26日
     * @version 1.0.0
     */
//    @Bean
//    public HttpMessageConverters fastJsonHttpMessageConverters() {
//        FastJsonHttpMessageConverter fasHttpMessageConverter = new FastJsonHttpMessageConverter();
//        FastJsonConfig fastJsonConfig = new FastJsonConfig();
//        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat
//                , SerializerFeature.SortField
//                , SerializerFeature.MapSortField
//                , SerializerFeature.QuoteFieldNames
//                , SerializerFeature.WriteMapNullValue
//                , SerializerFeature.WriteNullListAsEmpty
//                , SerializerFeature.WriteNullBooleanAsFalse
//                , SerializerFeature.WriteDateUseDateFormat);
//        // 序列化配置
//        SerializeConfig serializeConfig = new SerializeConfig();
//        NameFilter nameFilter = (object, name, value) -> name;
//        //解决JS中精度丢失问题
//        serializeConfig.put(Long.class, LongCodeHandle.instance);
//        serializeConfig.put(Long.TYPE, LongCodeHandle.instance);
//        serializeConfig.put(String.class, StringCodeHandle.instance);
//        serializeConfig.put(BigInteger.class, BigIntegerCodec.instance);
//        fastJsonConfig.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
//        fastJsonConfig.setSerializeConfig(serializeConfig);
//
//        // 在converter中添加配置信息
//        fasHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
//        // 中文乱码解决方案
//        List<MediaType> mediaTypes = new ArrayList<>();
//        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//        mediaTypes.add(MediaType.APPLICATION_JSON);
//        mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
//        mediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
//        mediaTypes.add(MediaType.TEXT_HTML);
//        mediaTypes.add(MediaType.MULTIPART_FORM_DATA);
//        mediaTypes.add(MediaType.IMAGE_GIF);
//        mediaTypes.add(MediaType.IMAGE_JPEG);
//        mediaTypes.add(MediaType.IMAGE_PNG);
//        mediaTypes.add(new MediaType("application", "vnd.spring-boot.actuator.v2+json"));
//        fasHttpMessageConverter.setSupportedMediaTypes(mediaTypes);
//
//        HttpMessageConverter<?> converter = fasHttpMessageConverter;
//        return new HttpMessageConverters(converter);
//    }
}
